package stack;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @author dx
 * @version 1.0
 * @date 2022/3/28 10:17
 * @description:  Que_to_Stack适用两个队列实现栈，尝试用一个队列实现栈。
 *
 * 这就需要：队列前端的元素是最后入栈的，即能保证最后入栈的最先出栈
 * 思路：入栈时首先获得入栈前的元素个数n，然后将元素入队到队列，再将这n个元素依此出队并入队到队列
 */
public class Que_to_Stack2 {

    Queue<Integer> queue;

    public Que_to_Stack2(){
        queue = new LinkedList<Integer>();
    }
    public void push(int x){
        int n = queue.size();  //获取入栈前  队列中的元素个数
        queue.offer(x);        //压栈元素 -入队

        for(int i=0; i<n;i++){
            queue.offer(queue.poll());  //相当于把队列的元素 依此换到后面排队，使得刚入队的元素排在最前面
            // ---借助：队列只能队头前端进行删除操作，而在表的后端进行插入操作
        }

    }
    public int pop(){
        return queue.poll();
    }
    public int top(){
        return queue.peek();
    }
    public boolean empty(){
        return queue.isEmpty();
    }
}
